(function(){
	'use strict';

	/**
	 * 这里为基础CALENDAR的二次开发部分，增加通过OPTIONS来增加业务逻辑的渲染
	 *
	 * zhxCalExtendLine 日历自定义扩展模块
	 * 
	 * @type {[type]}
	 */
	var app = angular.module('zhxCalApp', ['zhxBaseCalendar','zhxCalExtendLine']);

	app.config(function(zhxBaseCalendarProvider){

		zhxBaseCalendarProvider.config({
			locale 		: 'zh-cn',
			showHoliday : true,
			holidayUrl	: 'lib/zhx-calendar/data/holiday.json'
		});

	});	

	app.controller('zhxCalLineController',function($scope,$http,$timeout){

		// 生成数据数量
		var dataLenth = 500;

		/**
		 * @param  {[type]} momentDate [description]
		 * @return {[type]}            [description]
		 */
		var lunxiuData = [
				{ "name" : "张三" },
				{ "name" : "李四" },
				{ "name" : "王五" }
		]

		var baoyangData = [
			{ "busNumber" : "陕A12345" },
			{ "busNumber" : "陕A32165" },
			{ "busNumber" : "陕A32165" }
		]

		var guzhangData = [
			{ "busNumber" : "陕A88788" },
			{ "busNumber" : "陕A24212" },
			{ "busNumber" : "陕A32165" }
		]

		var getRadomNum = function(min,max){
			 return Math.floor(Math.random() * (max - min + 1)) + min;
		};

		var __getRdmData = function(randomData,min,max){

			var tmpArray = [];

			var rdm = getRadomNum(min,max);

			if( rdm === 0 ) return [];

			for( var i = 0; i < rdm; i++ ){
				tmpArray.push(randomData[i]);
			}

			return tmpArray;
		};

		var __constructData = function(momentDate){

			var tempData = [];

			var mDate = momentDate;

			for( var i = 0; i < dataLenth; i++ ){

				var lx = __getRdmData(lunxiuData,0,1),
					by = __getRdmData(lunxiuData,0,2),
					gz = __getRdmData(lunxiuData,0,1);

				var d = {
					"date" 		: momentDate.add(1,'d').format('YYYY-MM-DD'),
					"peiche"	: getRadomNum(10,20),
					"lunxiu"	: lx,
					"baoyang"	: by,
					"guzhang"	: gz,
					"plan_tangci": parseInt( Math.random() * 1000 ),
					"tangci":  parseInt( Math.random() * 1000 ),
					"totalMiles":  parseInt( Math.random() * 1000 ),
					"baoche":null,
					"laihuiBus":null	
				}

				tempData.push(d);

				mDate = momentDate;

			}

			return tempData;
		};


		/**
		 * 日历基础配置
		 * @type {Object}
		 */
		$scope.calendarOptions = {
			//日历事件对象
			//可配置初始值为 [] / null 或不配置该字段
			// event : null,
			//首次渲染月份，格式为以下任意格式均可
			//不设置该属性表示直接展示当前月份
			// date or momentDate or dateString
			// moment() / moment().add(2,'M') / new Date() /  '2016-10' / '2016-11-02'
			firstRenderDate : '2016-10',
			//渲染日历自定义渲染控制器，自定义日历内容的渲染都在此进行
			//该控制器必须以扩展组件的形式依赖注入进当前模块中使用
			//该控制器内可自定义日历格子内的模板与相对应的事件
			renderController : 'zhxExtendLineCtrl',
			//事件对象中日期KEY值，默认为 date
			eventDateKey : 'date',
			//自定义日历数据使用的配置项
			displayOptions : [
				{ name : "peiche", 	displayName: "配车",	color : "purple", pin : true },
				{ name : "lunxiu", 	displayName: "轮休",	color : "blue"	 },
				{ name : "baoyang",	displayName: "保养",	color : "orange" },
				{ name : "guzhang",	displayName: "故障",	color : "red" 	 }
			],
			// 是否自动渲染,开启后，组件会自动判断读取数据的最大最小日期，当翻页超过日期范围则自动执行onChange事件读取新数据
			// 如果设置为false，则表示只要翻页就会请求新数据
			// 默认为开启状态
			updateAutomic : true,
			//点击日历翻页按钮或其他需要更新日历自定义数据时使用
			//目前仅翻页调用该方法
			//@param date { object }  翻页后日历的日期 moment对象
			onChange : function(date){
				//如果需要更新数据，可直接使用
				//$scope.calendarOptions.event = res.data; 
				//的方式来对 event 更新
				// $http.get('data/cal-data2.json').then(function(res){
					// $scope.calendarOptions.event = tempData;	
				// });
					date.subtract(6,'M');
					$scope.calendarOptions.event = __constructData(date);
					console.log('update date by onChange event');	
				
			}
		};

		//获取日历自定义数据
		$http.get('data/cal-data.json').then(function(res){
			// $timeout(function(){
			// 	$scope.calendarOptions.event = res.data;
			// },0);
			// 添加一个延迟的目的是为了展示LOADING
			$timeout(function(){
				$scope.calendarOptions.event = __constructData( moment('2016-07-01') );
			},2000)

		});

	});

})()